Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
The coa npm package is a powerful command-line option parser that helps you build command-line applications by defining commands, options, and arguments in a declarative way. It provides a fluent API to make the definition of command-line interfaces easy and readable.
Command definition and execution
This code sample demonstrates how to define a command-line application with a version option and a subcommand. The application will display the version when the '--version' flag is used and will execute a subcommand when 'subcommand' is invoked.
const coa = require('coa');
coa.Cmd()
.name('app')
.title('My awesome command line app')
.helpful()
.opt()
.name('version')
.title('Show version')
.short('v')
.long('version')
.flag()
.act((opts) => console.log('v1.0.0'))
.end()
.cmd()
.name('subcommand')
.title('A subcommand example')
.helpful()
.act((opts, args) => console.log('Subcommand executed'))
.end()
.run(process.argv.slice(2));
Argument parsing
This code sample shows how to define a required argument for a command-line application. The application expects an input file as an argument and will print the name of the input file when the application is run.
const coa = require('coa');
coa.Cmd()
.name('app')
.title('My awesome command line app')
.helpful()
.arg()
.name('input')
.title('Input file')
.req()
.end()
.act((opts, args) => console.log(`Input file: ${args.input}`))
.run(process.argv.slice(2));
Option parsing
This code sample illustrates how to define an option for a command-line application. The application allows the user to specify an output file using either '-o' or '--output' flags and will print the name of the output file when the application is run.
const coa = require('coa');
coa.Cmd()
.name('app')
.title('My awesome command line app')
.helpful()
.opt()
.name('output')
.title('Output file')
.short('o')
.long('output')
.end()
.act((opts, args) => console.log(`Output file: ${opts.output}`))
.run(process.argv.slice(2));
Commander is a widely-used npm package for building command-line interfaces. It offers a similar declarative API for defining options and commands, and it is known for its simplicity and ease of use. Compared to coa, commander has a larger user base and more extensive documentation.
Yargs is another popular npm package for parsing command-line arguments. It provides a rich set of features for building interactive command-line tools, including advanced parsing, validation, and generating help messages. Yargs is often preferred for its fluent API and its support for subcommands, which is similar to coa but with more customization options.
Meow is a lighter alternative to coa, designed to be simple and minimalistic. It provides a straightforward way to parse command-line arguments and generate help text. While it lacks some of the advanced features of coa, such as the detailed command and option definitions, it is suitable for simpler command-line applications that do not require complex structures.
COA is a parser for command line options that aim to get maximum profit from formalization your program API. Once you write definition in terms of commands, options and arguments you automaticaly get:
require('coa').Cmd() // main (top level) command declaration
.name(process.argv[1]) // set top level command name from program name
.title('My awesome command line util') // title for use in text messages
.helpful() // make command "helpful", i.e. options -h --help with usage message
.opt() // add some option
.name('version') // name for use in API
.title('Version') // title for use in text messages
.short('v') // short key: -v
.long('version') // long key: --version
.flag() // for options without value
.act(function(opts) { // add action for option
// return message as result of action
return JSON.parse(require('fs').readFileSync(__dirname + '/package.json'))
.version;
})
.end() // end option chain and return to main command
.cmd()
.name('subcommand')
.apply(require('./subcommand')) // load subcommand from module
.end()
.cmd() // inplace subcommand declaration
.name('othercommand')
.title('Awesome other subcommand')
.helpful()
.opt()
.name('input')
.title('input file, required')
.short('i')
.long('input')
.val(function(v) { // validator function, also for translate simple values
return require('fs').createReadStream(v);
})
.req() // make option required
.end() // end option chain and return to command
.end() // end subcommand chain and return to parent command
.run(process.argv.slice(2)); // parse and run on process.argv
// subcommand.js
module.exports = function() {
this
.title('Awesome subcommand').helpful()
.opt()
.name('output')
.title('output file')
.short('o')
.long('output')
.output() // use default preset for "output" option declaration
.end()
};
Command is a top level entity. Commands may have options and arguments.
Returns object containing all its subcommands as methods to use from other programs.
@returns {Object}
Set a canonical command identifier to be used anywhere in the API.
@param String _name
command name
@returns COA.Cmd this
instance (for chainability)
Set a long description for command to be used anywhere in text messages.
@param String _title
command title
@returns COA.Cmd this
instance (for chainability)
Create new or add existing subcommand for current command.
@param COA.Cmd [cmd]
existing command instance
@returns COA.Cmd new or added subcommand instance
Create option for current command.
@returns COA.Opt new
option instance
Create argument for current command.
@returns COA.Opt new
argument instance
Add (or set) action for current command.
@param Function act
action function,
invoked in the context of command instance
and has the parameters:
- Object opts
parsed options
- Array args
parsed arguments
- Object res
actions result accumulator
It can return rejected promise by Cmd.reject (in case of error)
or any other value treated as result.
@param {Boolean} [force=false] flag for set action instead add to existings
@returns COA.Cmd this
instance (for chainability)
Apply function with arguments in context of command instance.
@param Function fn
@param Array args
@returns COA.Cmd this
instance (for chainability)
Set custom additional completion for current command.
@param Function fn
completion generation function,
invoked in the context of command instance.
Accepts parameters:
- Object opts
completion options
It can return promise or any other value treated as result.
@returns COA.Cmd this
instance (for chainability)
Make command "helpful", i.e. add -h --help flags for print usage.
@returns COA.Cmd this
instance (for chainability)
Adds shell completion to command, adds "completion" subcommand, that makes all the magic.
Must be called only on root command.
@returns COA.Cmd this
instance (for chainability)
Adds ability to extend command by external node modules.
@param String [pattern]
Pattern of modules names to search.
Should be simple string with %s
placeholder like coa-program-%s-subcommand
or without it — it will be treated as module name prefix then. E.g. coa-program-
.
Node module should export function or Cmd
object. Function will be passed
to Cmd.apply()
method of created subcommand object using Cmd.cmd()
method. And
Cmd
object will be passed to Cmd.cmd()
method.
@returns COA.Cmd this
instance (for chainability)
Build full usage text for current command instance.
@returns String usage
text
Parse arguments from simple format like NodeJS process.argv
and run ahead current program, i.e. call process.exit when all actions done.
@param Array argv
@returns COA.Cmd this
instance (for chainability)
Invoke specified (or current) command using provided options and arguments.
@param String|Array cmds
subcommand to invoke (optional)
@param Object opts
command options (optional)
@param Object args
command arguments (optional)
@returns Q.Promise
Return reject of actions results promise.
Use in .act() for return with error.
@param Object reason
reject reason
You can customize toString() method and exitCode property
of reason object.
@returns Q.promise rejected promise
Finish chain for current subcommand and return parent command instance.
@returns COA.Cmd parent
command
Option is a named entity. Options may have short and long keys for use from command line.
@namespace
@class Presents option
Set a canonical option identifier to be used anywhere in the API.
@param String _name
option name
@returns COA.Opt this
instance (for chainability)
Set a long description for option to be used anywhere in text messages.
@param String _title
option title
@returns COA.Opt this
instance (for chainability)
Set a short key for option to be used with one hyphen from command line.
@param String _short
@returns COA.Opt this
instance (for chainability)
Set a short key for option to be used with double hyphens from command line.
@param String _long
@returns COA.Opt this
instance (for chainability)
Make an option boolean, i.e. option without value.
@returns COA.Opt this
instance (for chainability)
Makes an option accepts multiple values.
Otherwise, the value will be used by the latter passed.
@returns COA.Opt this
instance (for chainability)
Makes an option req.
@returns COA.Opt this
instance (for chainability)
Makes an option to act as a command,
i.e. program will exit just after option action.
@returns COA.Opt this
instance (for chainability)
Set a validation (or value) function for argument.
Value from command line passes through before becoming available from API.
Using for validation and convertion simple types to any values.
@param Function _val
validating function,
invoked in the context of option instance
and has one parameter with value from command line
@returns COA.Opt this
instance (for chainability)
Set a default value for option.
Default value passed through validation function as ordinary value.
@param Object _def
@returns COA.Opt this
instance (for chainability)
Make option value inputting stream.
It's add useful validation and shortcut for STDIN.
@returns {COA.Opt} this
instance (for chainability)
Make option value outputing stream.
It's add useful validation and shortcut for STDOUT.
@returns COA.Opt this
instance (for chainability)
Add action for current option command.
This action is performed if the current option
is present in parsed options (with any value).
@param Function act
action function,
invoked in the context of command instance
and has the parameters:
- Object opts
parsed options
- Array args
parsed arguments
- Object res
actions result accumulator
It can return rejected promise by Cmd.reject (in case of error)
or any other value treated as result.
@returns COA.Opt this
instance (for chainability)
Set custom additional completion for current option.
@param Function fn
completion generation function,
invoked in the context of command instance.
Accepts parameters:
- Object opts
completion options
It can return promise or any other value treated as result.
@returns COA.Opt this
instance (for chainability)
Finish chain for current option and return parent command instance.
@returns COA.Cmd parent
command
Argument is a unnamed entity.
From command line arguments passed as list of unnamed values.
Set a canonical argument identifier to be used anywhere in text messages.
@param String _name
argument name
@returns COA.Arg this
instance (for chainability)
Set a long description for argument to be used anywhere in text messages.
@param String _title
argument title
@returns COA.Arg this
instance (for chainability)
Makes an argument accepts multiple values.
Otherwise, the value will be used by the latter passed.
@returns COA.Arg this
instance (for chainability)
Makes an argument req.
@returns COA.Arg this
instance (for chainability)
Set a validation (or value) function for argument.
Value from command line passes through before becoming available from API.
Using for validation and convertion simple types to any values.
@param Function _val
validating function,
invoked in the context of argument instance
and has one parameter with value from command line
@returns COA.Arg this
instance (for chainability)
Set a default value for argument.
Default value passed through validation function as ordinary value.
@param Object _def
@returns COA.Arg this
instance (for chainability)
Make argument value outputing stream.
It's add useful validation and shortcut for STDOUT.
@returns COA.Arg this
instance (for chainability)
Set custom additional completion for current argument.
@param Function fn
completion generation function,
invoked in the context of command instance.
Accepts parameters:
- Object opts
completion options
It can return promise or any other value treated as result.
@returns COA.Arg this
instance (for chainability)
Finish chain for current option and return parent command instance.
@returns COA.Cmd parent
command
FAQs
Command-Option-Argument: Yet another parser for command line options.
The npm package coa receives a total of 5,211,179 weekly downloads. As such, coa popularity was classified as popular.
We found that coa demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.